• Henrik Høltzer (heho)
    Software Construction - SWC 1.1 1B

    Semester: 1.sem., efterår 2019
    Email: heho@zealand.dk

    Materialer generelt:

    Noter:

    Object-Oriented Programming with C# (findes på GitHub her)


    Opgaver:

    C# Programming Exercises (findes på GitHub her)

    Unsolved exercise projects
    Solved exercise projects


    Supplerende materiale:

    Microsoft Visual C# Step by Step (8th ed.), by John Sharp (ISBN: 9781509301041)
    NB: Bogen er IKKE pensum
     

    Video

    Lynda.com (Gratis adgang; tilmeld med EASJ e-mail konto: https://www.lynda.com/email-signup) (SWC Lynda.com Playlist)
    MS Academy: C# Fundamentals for absolute beginners
    Nemprogrammering.dk (c# - kursus på dansk)

    Andet:

    Wiki C# : Template (mere info senere)

    Opgave oversigten
    Læse oversigten

     

    Uge Emner Materialer Opgaver
    36

    Velkommen til Datamatiker-studiet!

    Generel intro til Zealand og studiet

     

    Overblik over Software Construction

    Værktøjer og Materialer

    I gang med Visual Studio Enterprise 2019

    Introprogram
    Introduktion til Zealand og studiet

    Introduktion til IT-systemer

     

     

    Visual Studio Enterprise 2019
    Du får licens-nøgle fra Azure Dev Tools (tidligere Microsoft Imagine)
    ReSharper (du skal have en licens-nøgle)

    HowTo make Visual Studio (with ReSharper) quiet...
    Git

    Hyttetur (onsdag-torsdag, detailplanlægges senere)
    37

    Programming - Part I

    Code organisation
    Types
    Variables
    Type conversion
    Simple I/O
    Arithmetic
    Logic
    Functions

    IT HW SW

    Noter: s 7-41

    (Bog: Kap. 1, 2)

    Get.1
    Pro1.1 - Pro1.3

    Ekstra opgave: (PrintMovie - funktion)
    Tag udgangspunkt i opgave Pro1.1 (MovieManagerV05).
    Lav en ny funktion PrintMovie( ..) der kan udskrive alle dine informationer om en film.
    Bemærk, at funktionen skal defineres (skrives) uden for kroppen af MyCode() funktionen, dvs efter public void MyCode{ ... }.
    Funktionen skal være public og void, og skal tage alle dine varable der beskriver en film, som paramertre.
    Omstrukturerer (refaktorerer) MyCode( ) funktionen, så alle Console.WriteLine sætningerne der udskriver film-information flyttes til PrintMovie(...). Kald PrintMovie(...) fra MyCode( ).
    Prøv evt at ændre på dine film-oplysninger (fx title="XXX") og kald PrintMovie( ..) igen.

    38-39

    Object-Oriented Programming - Part I

    What is OO?
    Creating objects
    Reference-type vs. value-type
    Using properties and methods
    Class definitions
    Class collaboration
    Static classes and methods

    Noter: s.42-75

    (Bog: Kap. 7)

    Program fra klassen (17/9):
    MovieManager.zip

    Program fra klassen (19/9):
    PersonClassTest.zip

    Ekstra opgave: (LilleOpgave)
    1) Lav et program der kan tage et heltal som input og fortælle om det er et et negativt tal, et positivt tal eller nul.
    2) Lav et andet program der tager to heltal som input og kan fortælle hvilket af dem der er størst.

    Løsning: LilleOpgave.zip

    OOP.1.1 - 1.7

    Studiestartsprøve
    40-41

    Programming - Part II

    Control statements
    Debugging
    Data structures
    Code Quality (keeping code DRY)

    Noter: s.76-116

     (Bog: Kap. 4, 5, 10, 18)

     

    Bemærk, hvis du har svært ved C# og døjer lidt med de engelske gloser, findes der noget materiale på dansk her:

    Nemprogrammering.dk (c# - kursus på dansk) Nyt !

    Ekstra opgave: (Class Fly)
    Implementer klassn Fly - helt fra grunden i et nyt consol-project.
    Klassen Fly skal have følgende:
    Instansfelter: _xPosition, _yPosition, _xSpeed, _ySpeed og _flyId.
    Konstruktører: Fly(string) og Fly(string, double, double, double, double)
    Properties: FlyId(readonly), XPosition, YPosition, XSpeed, YSpeed
    Metoder: Move(), Accelerate(), Decelerate(), Stop(), Turn(double, double)

    Move() skal opdatere _xPosition og _yPosition ved at addere _xSpeed og _ySpeed til positionerne. Accelerate() og Decelerate() skal opdatere _xSpeed og _ySpeed med en fast procentsats fx 10%. Stop() sætter _xSpeed og _ySpeed til 0. Turn(double, double) gopdatere _xSpeed og _ySpeed med nye værdier.

    Test klassen Fly ved at oprette Fly-objekter i Main() og kalde metoderne på objekterne.
    (Brug Console.WriteLine() til at udskrive flydata før og efter hvert metodekald.)

    Hvis du har mod på vektorregning eller er en ørn til cosinus og sinus er du velkommen til at beregne de nye værdier i stedet for at parameteroverføre de nye værdier :)

    Løsning: FlyClass.zip (kode fra klassen)



    Pro.2.1 - Pro.2.15

    42 Efterårsferie  
    43-44

    Object-Oriented Programming - Part II

    Composition/Inheritance
    Object construction
    Overriding properties/methods
    Polymorphic behavior
    Abstract methods and classes
    Interfaces
    Exceptions

    Noter: s.117-133

    (Bog: Kap. 12, 13, 6 (i den orden))

    Begreber2 if og løkker
    EjendomsMægleren
    OOP.2.1 - 2.6
    ISpeak
    Exceptions-stack

    Program fra klassen (29/10):
    WolvPack.zip

    Løsning: ISpeak.zip (kode fra klassen, 29/10)
    Løsning:
    MyStackSimple.zip (kode fra klassen, 31/10)
    44-45

    GUI, XAML and Data Binding

    XML/XAML
    Simple GUI controls
    Layout controls
    Control properties
    Data binding fundamentals
    Collection views and Data binding
    Master/Details view and Data binding
    Commands

     

    Noter: s.134-174

    (Bog: Kap. 25, 26)

    Windows Dev Center: Layout

    How to: Implement Property Change Notification
    Problemer med at sætte windows i developer mode
    SimpleBindingMVVM.html (Opdateret d 12/11)
    NoteMVVM.html (Opdateret d. 14/11)
    (GUI.1.0 - GUI 1.8)
    45

    MVVM Architecture

    Single domain object
    Collection of domain objects
    Item view model
    Master view model
    Details view model
    MasterDetails view model
    Commands in MVVM

    Noter: s.175-193

    (Bog: Kap. 26)

    Databinding Part1
    Databinding Part2

    Other Interesting MVVM-links
    MVVM-Pattern-in-WPF-A-Simple-Tutorial-for-Absolute-Beginners
    WPF-MVVM-Quick-Start-Tutorial
    wpf-mvvm-pattern-a-simple-tutorial-for-absolute-beginners
    http://wpftutorial.net/DataGrid.html
    WPF Apps With The Model-View-ViewModel Design Pattern
    Simple MVVM Walkthrough – Part I

    (GUI.2.0 - GUI.2.3)

    C#-Projects:
    RelayCommand.zip
    RelayArgCommand.zip
    46

    Bindings
    MVVM Design Pattern

    MSDN: Commands, RelayCommands and EventToCommand
    EventToCommand is now built into Windows 8.1!

    Other Interesting XAML-links (about ListView and GridView)
    Quickstart: adding ListView and GridView controls (XAML)
    How to group items in a list or grid (XAML)
    Data Templating overview (DataTemplate, ItemTemplate)

    Designing Your XAML UI :
    XAML for Windows 10: Layout
    XAML for Windows 10: Items Controls

    Ekstra opgave: (Grid + StackPanel Tutorial)
    Use Grid and StackPanel to create a simple weather app

    HINT: XAML styler (God styler/formatter til din XAML-kode)

    Løsning: SimpleBindingMVVM.zip Program fra klassen (12/11)

    Løsning: NoteMVVM.zip Program fra klassen (14/11)

    46



    Persistens:
    Filer/Serialisering





    Windows App Store:
    MSDN: StorageFolder

    Exercise:
    SerializationTest

    Exercise:

    Implementer persistens i Note App'en se: NoteMVVM.html
    Dvs. det skal være muligt at hente og gemme Noter på fil.

    Bemærk:
    I windows App er der ikke adgang/rettigheder til filsystemet direkte, dvs der kan ikke umiddelbart streames (serialiseres) til en hvilkårlig fil. I stedet kan benyttes localstorage, der fås adgang til via class StorageFolder/StorageFile.

    Følgende skriver localdata til filen Data.txt i localstorage:
    StorageFile localFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("Data.txt", CreationCollisionOption.ReplaceExisting);
    await FileIO.WriteTextAsync(localFile, localData);

    Filen kan findes på harddisk her: C:\Users\{user}\AppData\Local\Packages\7bbfef26-f6ac-4a10-9fed-4abfefafca86_18sn2ae6rna7w\LocalState.


    Løsning: NoteMVVMSerialize.zip (Kode fra klassen 21/11)

    C#-Projects:
    WindowsAppSerializeTest.zip
    PersistencyService

    47

    Async, Task, Await

    MSDN: Asynchronous Programming with Async and Await
    CodeProject: Asynchronous Programming in C# 5.0 using async and await

    Don't Block on Async Code

    Slides: ProcessesAndThread (PowerPoint)
    Slides: AsynchronousPrograming (PowerPoint)

    C#-Projects:
    GuiExampleAsyncAwait
    SimpleBrowserAsync


    Notice:

    "Blend always launches with "We're preparing for first use" dialog"


    47 Exceptions


    MSDN Exceptions and Exception Handling (C# Programming Guide)
    MSDN
    Gracefully Handling Exceptions -21 (video)
    Exceptions (PowerPoint)



    Exceptions and Exception Handling in C#


    Exercise:
    I programmet SerializationTest.zip fra uge 46 blev der testet en simpel Reading og Writing til en FileStream, men uden brug af Exceptions-håndtering. Udvid programmet så der nu bliver implementeret en Exception-håndtering (fx håndtering af FileNotFoundException og DirectoryNotFoundException)

    MyStack


    C#-Projects:
    WindowsAppSerializeTestV2.zip
    (nu med håndtering af FilNotFoundException)


    Solutions:
    MyStack.zip

    48-50 Projektarbejde   C#-Projects:
    PersistencyService
    EventCatalogSingleton (kode vist i klassen)
    51

    Projektaflevering

     

    Repetition/Spørgetimer


    2

    Spørgetime: 7. januar
    (SWC: 10.00-11.30, SWD: 12.15-13.30)
    Eksamen 20-21. januar 2019
    Gruppe 1-3 d. 20/1
    Gruppe 4-6 d. 21/1

    Eksamensspørgsmål Nyt !
    Eksamensliste (Mødeliste)